package br.gov.ba.mam.swing;

import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import br.gov.ba.mam.beans.Artista;
import br.gov.ba.mam.gerente.GerenteAplicacao;
import br.gov.ba.mam.imagens.Imagens;

/**
 * @author Administrador
 *
 */
public class PainelConsulta extends JPanel implements ChangeListener{

	private static final long serialVersionUID = 1L;
	
	private ChangeListener change;
	private JPanel desktop;

	public PainelConsulta(ChangeListener _change) {
		this.setLayout(null);
		change = _change;
		trocarTela(TELA.TELA_CONSULTA);
	}
	
	public void trocarTela(TELA tela){
		if(desktop != null)
			this.remove(desktop);
		switch (tela) {
		case TELA_CONSULTA_ARTISTA:
			desktop =  new PainelConsultaArtitsta(this);	
			break;
		case TELA_CONSULTA_CATEGORIA:
			desktop = new PainelConsultaCategoria(this);
			break;
		case TELA_ARTISTA_ESTADO:
			desktop = new PainelConsultaArtistaEstado(this);
			break;
		case TELA_CATEGORIA_ESTADO:
			desktop = new PainelConsultaCategoriaEstado(this);
			break;	
		case TELA_QTD_ARTISTA_ESTADO:
			desktop = new PainelQtdArtistaEstado(this);
			break;
		case TELA_QTD_CATEGORIA:
			desktop = new PainelQtdCategoria(this);
			break;
		default:
			addTelaPrincipal();
			break;
		}
		desktop.setBounds(0, 0, 530, 540);
		add(desktop);
		repaint();
	}

	private void addTelaPrincipal() {
		
		desktop = new JPanel();
		desktop.setLayout(null);
		
		desktop.add(getPainelListagem());
		desktop.add(getPainelQuantidade());

	}
	
private Component getPainelQuantidade() {
		
		JPanel painelQuantidades = new JPanel();
		painelQuantidades.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Quantidades",TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION,new Font("Tahoma",Font.BOLD,15)));
		painelQuantidades.setBounds(10,250,500,210);
		painelQuantidades.setLayout(null);
		

		JButton jbConsultaCategoria = new JButton("Quantidade de inscritos por categoria");
		jbConsultaCategoria.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				trocarTela(TELA.TELA_QTD_CATEGORIA);
			}
		});
		jbConsultaCategoria.setBounds(70, 30, 350, 40);
		
		
		JButton jbConsultaCategoriaArtistaEstado = new JButton("Quantidade de Obras inscritas por Categoria");
		jbConsultaCategoriaArtistaEstado.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				trocarTela(TELA.TELA_CATEGORIA_ESTADO);
			}
		});
		jbConsultaCategoriaArtistaEstado.setBounds(70, 90, 350, 40);
		
		JButton jbConsultaQtdArtistaEstado = new JButton("Quantidade de Artista por Estado");
		jbConsultaQtdArtistaEstado.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				trocarTela(TELA.TELA_QTD_ARTISTA_ESTADO);
			}
		});
		jbConsultaQtdArtistaEstado.setBounds(70, 150, 350, 40);

	
		painelQuantidades.add(jbConsultaCategoria);
		painelQuantidades.add(jbConsultaCategoriaArtistaEstado);
		painelQuantidades.add(jbConsultaQtdArtistaEstado);

		
		
		
		return painelQuantidades;
	}
	
	private Component getPainelListagem() {
		
		JPanel painelListagem = new JPanel();
		painelListagem.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Listagem",TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION,new Font("Tahoma",Font.BOLD,15)));
		painelListagem.setBounds(10,10,500,230);
		painelListagem.setLayout(null);
		
		JButton jbConsultaArtista = new JButton("Inscritos");
		jbConsultaArtista.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				trocarTela(TELA.TELA_CONSULTA_ARTISTA);
			}
		});
		jbConsultaArtista.setBounds(70, 30, 300, 40);
		
		JButton jbExportConsultaArtista = new JButton();
		jbExportConsultaArtista.setIcon(new ImageIcon(Imagens.loadImage("print.png")));
		jbExportConsultaArtista.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				try {
					GerenteAplicacao.getInstancia().getRelatorioInscritos();
				} catch (Exception e1) {
					e1.printStackTrace();
				}
			}
		});
		jbExportConsultaArtista.setBounds(380, 30, 40, 40);

		
		JButton jbConsultaCategorias = new JButton("Categorias");
		jbConsultaCategorias.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				trocarTela(TELA.TELA_CONSULTA_CATEGORIA);
			}
		});
		jbConsultaCategorias.setBounds(70, 90, 350, 40);
		
		JButton jbConsultaArtistaEstado = new JButton("Artista por Estado");
		jbConsultaArtistaEstado.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				trocarTela(TELA.TELA_ARTISTA_ESTADO);
			}
		});
		jbConsultaArtistaEstado.setBounds(70, 150, 350, 40);
		
		
		painelListagem.add(jbConsultaArtista);
		painelListagem.add(jbExportConsultaArtista);
		painelListagem.add(jbConsultaCategorias);
		painelListagem.add(jbConsultaArtistaEstado);
		return painelListagem;
	}

	enum TELA{
		TELA_CONSULTA_ARTISTA,
		TELA_CONSULTA,
		TELA_CONSULTA_CATEGORIA,
		TELA_ARTISTA_ESTADO,
		TELA_CATEGORIA_ESTADO,
		TELA_QTD_ARTISTA_ESTADO,
		TELA_QTD_CATEGORIA
		;
	}

	@SuppressWarnings("unchecked")
	@Override
	public void stateChanged(ChangeEvent e) {
		
		if (e.getSource() instanceof Artista){
			change.stateChanged(e);
		}else if(e.getSource() instanceof List){
			System.out.println("PainelConsulta.stateChanged() eh uma lista");
			tocarTela((List<Artista>)e.getSource());
		} else
			trocarTela((TELA)e.getSource());
	}

	/** */
	private void tocarTela(List<Artista> source) {
		if(desktop != null)
			this.remove(desktop);
		desktop =  new PainelConsultaArtitsta(this,source);
		desktop.setBounds(0, 0, 530, 540);
		add(desktop);
		repaint();
	}
	
}